Spring Security Setup এবং কনফিগারেশন

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security)
180

স্প্রিং সিকিউরিটি একটি শক্তিশালী ফ্রেমওয়ার্ক যা Authentication এবং Authorization পরিচালনার জন্য ব্যবহৃত হয়। স্প্রিং বুট অ্যাপ্লিকেশন বা জাভা ভিত্তিক ওয়েব অ্যাপ্লিকেশনগুলিতে এটি সহজে সেটআপ এবং কনফিগার করা যায়।


স্প্রিং সিকিউরিটি সেটআপ

1. Dependency যোগ করা

স্প্রিং বুট ব্যবহার করলে spring-boot-starter-security ডিপেন্ডেন্সি যোগ করতে হবে।

Maven:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-security'

2. ডিফল্ট সেটআপ

স্প্রিং সিকিউরিটি ডিফল্টভাবে সব API বা URL কে সুরক্ষিত (secured) করে ফেলে। এর জন্য একটি ডিফল্ট লগইন ফর্ম প্রদান করে এবং ইউজারনেম user এবং পাসওয়ার্ড অ্যাপ্লিকেশন রান করার সময় লগে প্রিন্ট হয়

ডিফল্ট পাসওয়ার্ড দেখতে:

Using generated security password: <auto-generated-password>

স্প্রিং সিকিউরিটি কাস্টমাইজেশন

1. কনফিগারেশন ক্লাস তৈরি করা

স্প্রিং সিকিউরিটি কনফিগার করার জন্য WebSecurityConfigurerAdapter ক্লাসটি এক্সটেন্ড করতে হবে এবং @EnableWebSecurity এনোটেশন ব্যবহার করতে হবে।

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()  // Public URLs
                .antMatchers("/admin/**").hasRole("ADMIN")  // Admin URLs require ADMIN role
                .anyRequest().authenticated()  // All other requests require authentication
            .and()
            .formLogin()  // Enable default login form
            .and()
            .logout();  // Enable logout functionality
    }
}

2. ইন-মেমরি অথেন্টিকেশন যোগ করা

আপনি ইন-মেমরি ইউজারনেম এবং পাসওয়ার্ড সংজ্ঞায়িত করতে পারেন:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
        .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
        .and()
        .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
}

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();  // Password encoding mechanism
}

3. ডাটাবেস ভিত্তিক অথেন্টিকেশন

স্প্রিং সিকিউরিটি ডাটাবেস থেকে ইউজার ডেটা লোড করার জন্য UserDetailsService ইন্টারফেস ব্যবহার করে।

ডাটাবেস টেবিলের উদাহরণ:
CREATE TABLE users (
    username VARCHAR(50) NOT NULL PRIMARY KEY,
    password VARCHAR(100) NOT NULL,
    enabled BOOLEAN NOT NULL
);

CREATE TABLE authorities (
    username VARCHAR(50) NOT NULL,
    authority VARCHAR(50) NOT NULL,
    FOREIGN KEY (username) REFERENCES users(username)
);
কনফিগারেশন:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.jdbcAuthentication()
        .dataSource(dataSource)
        .usersByUsernameQuery("SELECT username, password, enabled FROM users WHERE username = ?")
        .authoritiesByUsernameQuery("SELECT username, authority FROM authorities WHERE username = ?");
}

4. JWT ভিত্তিক অথেন্টিকেশন

JSON Web Token (JWT) ব্যবহারের মাধ্যমে অথেন্টিকেশন ও অথরাইজেশন সিস্টেম তৈরি করা:

JWT ফিল্টার:
public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
    @Override
    protected void successfulAuthentication(HttpServletRequest request,
                                            HttpServletResponse response,
                                            FilterChain chain,
                                            Authentication authResult) throws IOException, ServletException {
        String token = Jwts.builder()
            .setSubject(authResult.getName())
            .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
            .signWith(SignatureAlgorithm.HS512, SECRET.getBytes())
            .compact();
        response.addHeader("Authorization", "Bearer " + token);
    }
}
সিকিউরিটি কনফিগারেশন:
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
        .authorizeRequests()
            .antMatchers("/login").permitAll()
            .anyRequest().authenticated()
        .and()
        .addFilter(new JWTAuthenticationFilter(authenticationManager()))
        .addFilter(new JWTAuthorizationFilter(authenticationManager()));
}

5. CSRF সুরক্ষা

ডিফল্টভাবে, স্প্রিং সিকিউরিটি CSRF সুরক্ষা চালু রাখে। তবে REST API-র ক্ষেত্রে এটি নিষ্ক্রিয় করা যেতে পারে:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();  // Disable CSRF protection
}

সম্পূর্ণ উদাহরণ

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()  // Public URLs
                .antMatchers("/admin/**").hasRole("ADMIN")  // Admin URLs
                .anyRequest().authenticated()  // All others require login
            .and()
            .formLogin()  // Enable form login
                .loginPage("/login")  // Custom login page
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
            .and()
            .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

উপসংহার

স্প্রিং সিকিউরিটি সেটআপ করা সহজ এবং এটি বিভিন্ন অথেন্টিকেশন ও অথরাইজেশন পদ্ধতি সমর্থন করে। আপনি ইন-মেমরি অথেন্টিকেশন, ডাটাবেস ভিত্তিক অথেন্টিকেশন, অথবা JWT ও OAuth2 এর মতো আধুনিক অথেন্টিকেশন সিস্টেম ইমপ্লিমেন্ট করতে পারেন। এর কাস্টমাইজেশন অপশন অ্যাপ্লিকেশনকে নিরাপদ এবং দক্ষ করে তোলে।

Content added By

Spring Initializr দিয়ে Spring Security প্রজেক্ট তৈরি করা

145

Spring Initializr একটি Spring Boot প্রজেক্ট তৈরি করার একটি দ্রুত এবং সহজ মাধ্যম। এটি ব্যবহার করে Spring Security অন্তর্ভুক্ত একটি প্রজেক্ট তৈরি করতে নিচের ধাপগুলো অনুসরণ করুন।


ধাপ ১: Spring Initializr এ যান

  1. ব্রাউজারে Spring Initializr খুলুন।
  2. নিচের প্রয়োজনীয় ইনপুট প্রদান করুন:
    • Project: Maven বা Gradle
    • Language: Java
    • Spring Boot Version: Latest Stable Version
    • Group: আপনার পছন্দ অনুযায়ী (e.g., com.example)
    • Artifact: আপনার প্রজেক্টের নাম (e.g., spring-security-demo)
    • Name: প্রজেক্টের নাম
    • Dependencies: Spring Web, Spring Security, এবং (যদি প্রয়োজন হয়) Spring Boot DevTools

ধাপ ২: ডিপেনডেন্সি যোগ করুন

Spring Security প্রজেক্ট তৈরির সময় নিচের ডিপেনডেন্সিগুলি যুক্ত করুন:

  • Spring Web: ওয়েব অ্যাপ্লিকেশন তৈরি করতে।
  • Spring Security: সিকিউরিটি ফিচার যোগ করার জন্য।
  • Thymeleaf (ঐচ্ছিক): ফ্রন্ট-এন্ডে UI ইন্টিগ্রেশন করলে।

ধাপ ৩: প্রজেক্ট ডাউনলোড করুন

  1. Generate বোতামে ক্লিক করুন।
  2. একটি .zip ফাইল ডাউনলোড হবে। এটি আনজিপ করুন এবং আপনার পছন্দের IDE (e.g., IntelliJ IDEA, Eclipse) তে খুলুন।

ধাপ ৪: Maven পম (pom.xml) ফাইল চেক করুন

Spring Security এবং অন্যান্য ডিপেনডেন্সি যুক্ত হয়েছে কি না তা নিশ্চিত করুন।

pom.xml উদাহরণ:

<dependencies>
    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
    <!-- Thymeleaf (Optional) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    
    <!-- DevTools (Optional) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
</dependencies>

ধাপ ৫: প্রজেক্ট রান করুন

Spring Boot অ্যাপ্লিকেশন রান করার জন্য নিচের কমান্ড দিন:

mvn spring-boot:run

ডিফল্টভাবে, অ্যাপ্লিকেশনটি http://localhost:8080 এ চলবে।


ধাপ ৬: ডিফল্ট Spring Security পরীক্ষা করুন

Spring Security ডিফল্টভাবে সক্রিয় থাকবে:

  • ডিফল্ট ইউজারনেম: user
  • ডিফল্ট পাসওয়ার্ড: কনসোলে দেখতে পাবেন (e.g., Using generated security password: লাইনটিতে)।

ডিফল্ট লগইন পেজ:

Spring Security একটি ডিফল্ট লগইন ফর্ম সরবরাহ করে। ব্রাউজারে http://localhost:8080 এ যান, এবং লগইন ফর্মটি দেখুন।


ধাপ ৭: Spring Security কাস্টমাইজ করুন

১. কাস্টম সিকিউরিটি কনফিগারেশন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll() // Public URLs
                .anyRequest().authenticated() // Others require authentication
            )
            .formLogin(form -> form
                .loginPage("/login")
                .permitAll()
            )
            .logout(logout -> logout
                .logoutUrl("/logout")
                .permitAll()
            );
        return http.build();
    }
}

২. ইন-মেমরি ইউজার যোগ করুন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class InMemoryUserConfig {

    @Bean
    public InMemoryUserDetailsManager userDetailsManager() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();

        UserDetails admin = User.withDefaultPasswordEncoder()
            .username("admin")
            .password("admin")
            .roles("ADMIN")
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}

৩. লগইন পেজ কাস্টমাইজ করুন:

src/main/resources/templates/login.html যোগ করুন (Thymeleaf ব্যবহৃত হলে)।

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Login</title>
</head>
<body>
    <h1>Custom Login Page</h1>
    <form th:action="@{/login}" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" />
        <br />
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" />
        <br />
        <button type="submit">Login</button>
    </form>
</body>
</html>

ধাপ ৮: প্রজেক্টের প্রাথমিক বৈশিষ্ট্য পরীক্ষা করুন

  1. কাস্টম লগইন পেজ কাজ করছে কি না তা চেক করুন।
  2. বিভিন্ন URL-এ অ্যাক্সেস নিয়ন্ত্রণ সঠিকভাবে কাজ করছে কি না তা পরীক্ষা করুন।

Spring Initializr দিয়ে তৈরি Spring Security প্রজেক্টটি আপনার প্রয়োজনমতো কাস্টমাইজ করা সহজ এবং এটি দ্রুত একটি নিরাপদ ওয়েব অ্যাপ্লিকেশন সেটআপ করতে সহায়ক।

Content added By

Maven/Gradle দিয়ে Spring Security অন্তর্ভুক্ত করা

174

স্প্রিং সিকিউরিটি আপনার প্রোজেক্টে অন্তর্ভুক্ত করতে হলে Maven বা Gradle বিল্ড টুল ব্যবহার করতে পারেন। নীচে উভয় পদ্ধতির জন্য উদাহরণ দেওয়া হয়েছে:


১. Maven দিয়ে Spring Security অন্তর্ভুক্ত করা

প্রয়োজনীয় নির্ভরতা (Dependencies)

আপনার pom.xml ফাইলে স্প্রিং সিকিউরিটি নির্ভরতা যুক্ত করুন:

<dependencies>
    <!-- Spring Boot Starter Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <!-- Optional: Thymeleaf (for custom login pages) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

ব্যাখ্যা:

  • spring-boot-starter-security স্প্রিং সিকিউরিটির সমস্ত মূল বৈশিষ্ট্য অন্তর্ভুক্ত করে।
  • যদি আপনি কাস্টম লগইন পেজ তৈরি করতে চান, তাহলে thymeleaf লাইব্রেরি অন্তর্ভুক্ত করতে পারেন।

Maven কমান্ড চালান

আপনার প্রোজেক্টের ডিপেন্ডেন্সি ডাউনলোড করার জন্য Maven কমান্ড চালান:

mvn clean install

২. Gradle দিয়ে Spring Security অন্তর্ভুক্ত করা

প্রয়োজনীয় নির্ভরতা (Dependencies)

আপনার build.gradle ফাইলে স্প্রিং সিকিউরিটির নির্ভরতা যুক্ত করুন:

dependencies {
    // Spring Boot Starter Security
    implementation 'org.springframework.boot:spring-boot-starter-security'

    // Optional: Thymeleaf (for custom login pages)
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}

ব্যাখ্যা:

  • implementation কিওয়ার্ড ব্যবহার করে ডিপেন্ডেন্সি যোগ করা হয়।
  • কাস্টমাইজড লগইন পেজের জন্য thymeleaf অন্তর্ভুক্ত করুন।

Gradle কমান্ড চালান

ডিপেন্ডেন্সি ডাউনলোড এবং প্রোজেক্ট রিফ্রেশ করার জন্য Gradle কমান্ড চালান:

gradle build

৩. ডিপেন্ডেন্সি অন্তর্ভুক্ত করার পর কি হবে?

প্রাথমিক কনফিগারেশন

  1. Maven/Gradle দিয়ে স্প্রিং সিকিউরিটি অন্তর্ভুক্ত করার পরে, এটি ডিফল্ট সিকিউরিটি যোগ করবে।
  2. যখন আপনি আপনার অ্যাপ্লিকেশন চালাবেন:
    • প্রতিটি URL অ্যাক্সেস করার জন্য লগইন পেজ দেখা যাবে।
    • ডিফল্ট ইউজারনেম user এবং একটি জেনারেটেড পাসওয়ার্ড কনসোলে প্রদর্শিত হবে। উদাহরণ:

      Using generated security password: 3a1b2c3d4e
      

ডিফল্ট পাসওয়ার্ড নিষ্ক্রিয় করা

যদি আপনি কাস্টম ইউজার এবং পাসওয়ার্ড যুক্ত করতে চান, তাহলে একটি SecurityConfig ক্লাস তৈরি করুন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .formLogin();
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(); // Password Encryption
    }
}

উপসংহার

  • Maven বা Gradle এর মাধ্যমে স্প্রিং সিকিউরিটি সহজেই আপনার প্রোজেক্টে যোগ করা যায়।
  • ডিফল্ট সেটআপ আপনাকে নিরাপত্তার একটি বেসলাইন সরবরাহ করে, যা আপনি কাস্টমাইজ করতে পারবেন।
  • আপনার প্রয়োজন অনুযায়ী কাস্টম অথেনটিকেশন/অথরাইজেশন সেটআপ করার জন্য কনফিগারেশন কাস্টমাইজ করুন।
Content added By

application.properties বা application.yml ফাইলে Security কনফিগারেশন

182

Spring Security-এর কিছু সাধারণ কনফিগারেশন আপনি application.properties বা application.yml ফাইলে সেট করতে পারেন। এটি মূলত সহজ কনফিগারেশনগুলির জন্য ব্যবহৃত হয়, যেমন ডিফল্ট লগইন পৃষ্ঠা কাস্টমাইজেশন, CSRF সক্ষম/অক্ষম করা, এবং HTTP Basic বা Form Login সক্রিয় করা।


application.properties ফাইলে Security কনফিগারেশন

# Spring Security Default User Credentials
spring.security.user.name=admin  # Default username
spring.security.user.password=admin123  # Default password
spring.security.user.roles=ADMIN,USER  # Default roles

# Custom Login Page
server.servlet.context-path=/myapp  # Change context path
server.port=8080  # Change server port

# CSRF Configuration
spring.security.filter.dispatcher-types=ASYNC, ERROR, REQUEST  # Dispatcher types for security filters

# Enable/Disable Security Features
management.endpoints.web.exposure.include=*  # Enable all actuator endpoints

application.yml ফাইলে Security কনফিগারেশন

spring:
  security:
    user:
      name: admin # Default username
      password: admin123 # Default password
      roles: ADMIN,USER # Default roles

server:
  servlet:
    context-path: /myapp # Change context path
  port: 8080 # Change server port

management:
  endpoints:
    web:
      exposure:
        include: "*" # Enable all actuator endpoints

Common Use Cases

1. Default Username এবং Password কনফিগার করা

Spring Security যোগ করার পরে, ডিফল্ট ব্যবহারকারী user এবং পাসওয়ার্ড কনসোলে জেনারেট হয়। আপনি এটি application.properties বা application.yml-এ কাস্টমাইজ করতে পারেন:

application.properties

spring.security.user.name=myuser
spring.security.user.password=mypassword

application.yml

spring:
  security:
    user:
      name: myuser
      password: mypassword

2. CSRF Protection Disable করা (শুধু Development Environment-এর জন্য)

CSRF সুরক্ষা অক্ষম করার জন্য, নিচের কনফিগারেশনটি ব্যবহার করুন:

application.properties

spring.security.filter.csrf.enabled=false

application.yml

spring:
  security:
    filter:
      csrf:
        enabled: false

3. HTTPS/SSL সক্ষম করা

আপনার অ্যাপ্লিকেশন HTTPS সক্ষম করতে:

application.properties

server.ssl.enabled=true
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=yourpassword
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=youralias

application.yml

server:
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: yourpassword
    key-store-type: PKCS12
    key-alias: youralias

4. Custom Login এবং Logout URL সেট করা

Spring Security Form Login বা Logout URL কাস্টমাইজ করা যেতে পারে:

application.properties

server.servlet.context-path=/app
spring.security.oauth2.client.registration.google.client-id=your-client-id
spring.security.oauth2.client.registration.google.client-secret=your-client-secret

5. Actuator Security Management

Actuator এন্ডপয়েন্ট নিরাপদ রাখতে:

application.properties

management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=always
management.security.enabled=true

Advanced Configuration

যদি আপনাকে আরও কাস্টমাইজ করতে হয় (যেমন Authentication Provider, Authorization Rules), তখন আপনাকে একটি কাস্টম Java Configuration ক্লাস ব্যবহার করতে হবে। application.properties বা application.yml-এ সীমিত কনফিগারেশন করা যায়।

নোট

  1. Production Environment-এ পাসওয়ার্ড কখনোই হার্ডকোড করবেন না।
  2. Sensitive তথ্যগুলি Environment Variables বা External Configuration Server থেকে সংগ্রহ করুন।

Spring Security এবং application.properties/application.yml-এর সমন্বয় আপনার প্রাথমিক সেটআপকে দ্রুত এবং সহজ করে তোলে।

Content added By

প্রথম Spring Security প্রজেক্ট তৈরি (Hello Secure World)

157

Spring Security দিয়ে প্রথম প্রজেক্ট তৈরি করা একটি সহজ এবং কার্যকর উপায় Spring Security এর মূল বিষয়গুলো বুঝতে। নিচে "Hello Secure World" প্রজেক্ট তৈরি করার জন্য ধাপে ধাপে নির্দেশনা দেওয়া হলো।


প্রয়োজনীয় টুলস এবং সেটআপ:

  1. Spring Boot Starter: Spring Boot ব্যবহার করে প্রজেক্ট তৈরি।
  2. ডিপেনডেন্সি:
    • Spring Security
    • Spring Web
  3. Java Development Kit (JDK): ১১ বা এর উপরে।
  4. Maven বা Gradle: ডিপেনডেন্সি ম্যানেজমেন্টের জন্য।

Step 1: Maven প্রজেক্ট তৈরি করুন

Spring Initializer ব্যবহার করে একটি Spring Boot প্রজেক্ট তৈরি করুন।

Maven ডিপেনডেন্সি:

<dependencies>
    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

Step 2: application.properties কনফিগার করুন

Spring Boot ডিফল্টভাবে /login এ একটি ফর্ম সরবরাহ করে। তবে আমরা এটি কাস্টমাইজ করবো।

server.port=8080
spring.security.user.name=admin
spring.security.user.password=admin123
  • এখানে, ডিফল্ট ইউজারনেম এবং পাসওয়ার্ড admin এবং admin123 সেট করা হলো।

Step 3: একটি REST Controller তৈরি করুন

Spring Security ব্যবহার করে "Hello Secure World" মেসেজ প্রদর্শনের জন্য একটি কন্ট্রোলার তৈরি করুন।

HelloController:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String helloWorld() {
        return "Hello Secure World!";
    }
}

Step 4: Spring Security কনফিগারেশন তৈরি করুন

Spring Security-তে কাস্টমাইজড সিকিউরিটি সেটআপ করার জন্য @EnableWebSecurity ব্যবহার করে একটি কনফিগারেশন ক্লাস তৈরি করুন।

SecurityConfig:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/hello").authenticated() // /hello রিকোয়েস্ট অনুমোদিত হতে হবে
            .and()
            .httpBasic(); // HTTP Basic Authentication সক্রিয়
    }
}

Step 5: অ্যাপ্লিকেশন চালু করুন

  1. main মেথড ব্যবহার করে Spring Boot অ্যাপ্লিকেশন চালু করুন।

SpringSecurityDemoApplication:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringSecurityDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringSecurityDemoApplication.class, args);
    }
}

Step 6: প্রজেক্ট টেস্ট করুন

  1. অ্যাপ্লিকেশন চালু করুন:
    • Maven কমান্ড ব্যবহার করুন:

      mvn spring-boot:run
      
  2. ব্রাউজারে /hello রিকোয়েস্ট পাঠান:
    • URL: http://localhost:8080/hello
    • ব্রাউজার একটি লগইন ফর্ম দেখাবে।
    • ইউজারনেম: admin, পাসওয়ার্ড: admin123 দিন।
  3. রেসপন্স দেখুন:
    • লগইন সফল হলে ব্রাউজারে "Hello Secure World!" মেসেজ দেখা যাবে।

Step 7: Spring Security টেস্ট করুন

1. Unauthorized Access:

  • /hello অ্যাক্সেস করার আগে লগইন না করলে 401 Unauthorized রেসপন্স পাওয়া যাবে।

2. Authenticated Access:

  • সঠিক ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করলে অ্যাক্সেস পাওয়া যাবে।

3. Custom Authentication:

  • Spring Security-এর ডিফল্ট কনফিগারেশন পরিবর্তন করে বিভিন্ন URL-এ ভিন্ন রোল নির্ধারণ করতে পারেন।

কোডের প্রধান পয়েন্ট:

  1. Spring Security ডিফল্ট সুরক্ষা: Spring Boot স্বয়ংক্রিয়ভাবে /login এবং HTTP Basic Authentication সক্রিয় করে।
  2. Custom Security Rules:
    • http.authorizeRequests() দিয়ে কাস্টম অ্যাক্সেস কন্ট্রোল সেট করা হয়।
  3. Authentication Mechanism:
    • HTTP Basic Authentication ব্যবহার করে প্রাথমিক লগইন নিশ্চিত করা হয়।

উপসংহার:

এই "Hello Secure World" প্রজেক্টটি Spring Security এর মূল বিষয়গুলো অনুশীলন করার জন্য একটি চমৎকার সূচনা। Spring Security ব্যবহার করে অ্যাপ্লিকেশনের Authentication এবং Authorization সহজে বাস্তবায়ন করা যায়। ভবিষ্যতে, এই বেসিক প্রজেক্টটি JWT, OAuth2, এবং Role-Based Access Control (RBAC) এর মতো উন্নত সিকিউরিটি ফিচার যুক্ত করার জন্য একটি ভিত্তি হিসেবে কাজ করতে পারে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...